/**
 * 计算年龄 birthDateStr：时间戳字符串
 */
export function getCalculatedAge (birthDateStr) {
  // birthDateStr为空直接return空
  if (!birthDateStr) {
    return ''
  }
  // 将时间戳字符串解析为日期对象 时间戳以秒为单位，需要乘以 1000 转换为毫秒
  const birthDate = new Date(parseInt(birthDateStr) * 1000)
  // 获取当前日期
  const currentDate = new Date()
  // 计算年龄
  let age = currentDate.getFullYear() - birthDate.getFullYear()
  // 检查出生日期的月份和日期是否已过，如果未过，则年龄减 1
  if (
    currentDate.getMonth() < birthDate.getMonth() ||
        (currentDate.getMonth() === birthDate.getMonth() &&
            currentDate.getDate() < birthDate.getDate())
  ) {
    age--
  }
  return age
}

/**
 * 时间戳转北京时间 yyyy-MM-dd HH:mm:ss
 */
export function getTimestampToBeijingDate (timestamp) {
  const timestampInMilliseconds = timestamp * 1000
  const date = new Date(timestampInMilliseconds)
  const year = date.getFullYear()
  const month = (date.getMonth() + 1).toString().padStart(2, '0')
  const day = date.getDate().toString().padStart(2, '0')
  const hours = date.getHours().toString().padStart(2, '0')
  const minutes = date.getMinutes().toString().padStart(2, '0')
  const seconds = date.getSeconds().toString().padStart(2, '0')
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}

/**
 * 时间戳转年月日（yyyy-MM-dd）
 */
export function getTimestampsTurnedDate (timestamp) {
  const timestampInMilliseconds = timestamp * 1000
  const date = new Date(timestampInMilliseconds)
  const year = date.getFullYear()
  const month = (date.getMonth() + 1).toString().padStart(2, '0')
  const day = date.getDate().toString().padStart(2, '0')
  return `${year}-${month}-${day}`
}

/**
 * 去重后获取appName、appType
 * appCode
 */
export function getAppNameAndAppType (appInfoList) {
  let appInfoData = []
  if (appInfoList) {
    appInfoData = appInfoList.reduce((accumulator, current) => {
      if (!accumulator.some((item) => item.appType === current.appType)) {
        accumulator.push(current)
      }
      return accumulator
    }, [])
  }
  return appInfoData
}

/**
 * 根据appCode查找appName
 * appCode
 */
export function getAppNameByAppType (appTypes, appInfoMap) {
  if (appInfoMap && appTypes) {
    const selectedAppTypes = appTypes.split(',').map(appType => appType.trim())
    // 使用Set确保应用程序名称的唯一性
    const uniqueAppNames = new Set()
    selectedAppTypes.forEach(inputAppType => {
      // 在appInfoMap中对键执行模糊搜索
      const matchingKeys = [...appInfoMap.keys()].filter(key => inputAppType.includes(key))
      matchingKeys.forEach(matchingKey => {
        const appName = appInfoMap.get(matchingKey)
        if (appName) {
          uniqueAppNames.add(appName)
        } else {
          // 如果在appInfoMap中没有找到matchingKey，则使用原始的inputAppType
          uniqueAppNames.add(inputAppType)
        }
      })
    })
    return [...uniqueAppNames].join(',')
  }
  return ''
}
// export function getAppNameByCode (appTypes, appInfoMap) {
//   if (appInfoMap && appTypes) {
//     const selectedAppTypes = appTypes.split(',').map(appType => appType.trim())
//     return selectedAppTypes.map(appType => appInfoMap.get(appType) || appType).join(',')
//   }
//   return ''
// }

/**
 * 获取间隔一个月的时间
 */
export function getNowTimeOneMonth () {
  const currentDate = new Date()
  // 获取一个月前的日期
  currentDate.setMonth(currentDate.getMonth() - 1)
  return [formatDate(new Date()), formatDate(currentDate)]
}

// 将日期转换为指定格式（YYYY-MM-DD）
function formatDate (date) {
  var year = date.getFullYear()
  var month = ('0' + (date.getMonth() + 1)).slice(-2)
  var day = ('0' + date.getDate()).slice(-2)
  return year + '-' + month + '-' + day
}

/**
 * 中国城市转化 area_code
 * 根据逗号分隔的code
 */
export function getChinaCityName (codes, list) {
  if (codes !== null && codes !== '' && list !== null && list.length !== 0) {
    // 将逗号分隔的键字符串拆分成数组
    const keys = codes ? codes.toString().split(',') : []
    const results = []
    // 遍历 key 数组，在 list 中查找对应的 value 值
    keys.forEach(key => {
      const item = list.find(item => item.areaCode === key)
      if (item) {
        results.push(item.cityNameZh)
      } else {
        results.push(key)
      }
    })
    if (results.length > 0) {
      return results.join(',')
    } else {
      return ''
    }
  }
  return ''
}

/**
 * 校验输入的是否是数字类型
 */
export function checkIfNumber (inputValue) {
  let checkResult = false
  if (inputValue !== null && inputValue !== '') {
    // 使用正则表达式匹配输入是否为数字
    if (/^\d+$/.test(inputValue)) {
      // 输入是数字，清除错误标记
      checkResult = false
    } else {
      // 输入不是数字，显示错误信息
      checkResult = true
    }
  }
  return checkResult
}

/**
 * 校验输入的是否是单词/空格划分的单词组
 */
export function checkIfWord (inputValue) {
  const wordsPattern = /^(\w+\s)*\w+$/
  if (inputValue !== null && inputValue !== '') {
    return wordsPattern.test(inputValue)
  } else {
    return false
  }
}
/**
 * 字符串取出其中英文的单词转成驼峰命名
 */
export function toCamelCase (str) {
  // 按非字母字符分割字符串,过滤掉空字符串
  const words = str.split(/[^a-zA-Z]+/).filter(word => word.length > 0)

  if (words.length === 0) {
    return 'default'
  }

  return words
    .map((word, index) => {
      if (index === 0) {
        // 第一个单词小写
        return word.toLowerCase()
      } else {
        // 后面单词的首字母大写
        return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()
      }
    })
    .join('') // 将所有单词连接成一个字符串
}
